Symbols রুবি প্রোগ্রামিং ভাষায় একটি বিশেষ ধরনের অবজেক্ট, যা সাধারণত কনস্ট্যান্ট বা কী হিসেবে ব্যবহৃত হয়। সিম্বলগুলো একটি অপরিবর্তনীয় (immutable) এবং হালকা (lightweight) ডেটা টাইপ হিসেবে কাজ করে। সিম্বলস শুধুমাত্র একবার মেমোরিতে স্থান পায়, এবং এতে হালকা ব্যবহারের ফলে এটি স্ট্রিংয়ের তুলনায় দ্রুত এবং মেমরি দক্ষ।
Symbols এর বৈশিষ্ট্য:
- Immutable: সিম্বল একবার তৈরি হলে তার মান পরিবর্তন করা যায় না, যা এটি নিরাপদ এবং কার্যকর করে তোলে যখন ডেটার অপরিবর্তনীয়তা দরকার।
- Memory Efficient: স্ট্রিংয়ের তুলনায় সিম্বল মেমরিতে কম স্থান নেয়, কারণ সিম্বল একবার মেমোরিতে রাখা হয় এবং পুনরায় ব্যবহৃত হয়।
- Fast Comparison: সিম্বল গুলি স্ট্রিংয়ের তুলনায় দ্রুত তুলনা করা যায় কারণ তাদের একক রেফারেন্স (memory address) থাকে।
উদাহরণ:
symbol = :name
another_symbol = :name
puts symbol == another_symbol # Output: trueএখানে, :name দুটি সিম্বল একই মেমরি রেফারেন্স ধারণ করে, এবং তা দ্রুত তুলনা করা সম্ভব।
Strings এবং Symbols এর মধ্যে পার্থক্য
Strings এবং Symbols রুবি ভাষায় উভয়ই টেক্সট ডেটা ধারণ করতে ব্যবহৃত হয়, তবে তাদের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে। নিচে Symbols এবং Strings এর মধ্যে মূল পার্থক্য তুলে ধরা হলো:
| বৈশিষ্ট্য | Symbols | Strings |
|---|---|---|
| ডেটা টাইপ | Immutable (অপরিবর্তনীয়) | Mutable (পরিবর্তনযোগ্য) |
| মেমরি ব্যবস্থাপনা | একক রেফারেন্স, মেমোরি দক্ষ | প্রতিবার নতুন কপি তৈরি হয়, বেশি মেমরি খরচ করে |
| কার্যকারিতা | দ্রুত তুলনা, কম মেমরি ব্যবহৃত | তুলনা ধীর, বেশিরভাগ ক্ষেত্রে বেশি মেমরি ব্যবহৃত |
| ব্যবহার | কী বা কনস্ট্যান্ট হিসেবে ব্যবহৃত | সাধারণ টেক্সট ডেটা, ম্যানিপুলেশন করার জন্য ব্যবহৃত |
| নামকরণ | কোলন (:) দিয়ে শুরু হয় (:name) | ডাবল কোট ("") বা সিঙ্গেল কোট ('') দিয়ে শুরু হয় ("name") |
| উদাহরণ | :name, :age, :city | "name", 'age', "New York" |
১. Immutable vs Mutable (অপরিবর্তনীয় বনাম পরিবর্তনযোগ্য)
Symbols একবার তৈরি হওয়ার পর পরিবর্তন করা যায় না, কিন্তু Strings পরিবর্তনযোগ্য। অর্থাৎ, আপনি একটি String এর মান পরিবর্তন করতে পারেন, কিন্তু Symbol এর মান পরিবর্তন করা সম্ভব নয়।
Symbols উদাহরণ:
symbol = :name
# symbol = :name_changed # এটি একটি নতুন সিম্বল হবে, পুরনো সিম্বল পরিবর্তন হবে না।Strings উদাহরণ:
string = "name"
string = "new_name" # string পরিবর্তিত হচ্ছে২. Memory Efficiency (মেমরি দক্ষতা)
Symbols মেমরিতে কম জায়গা নেয় কারণ একটি সিম্বল একবার মেমরিতে সেভ হয় এবং প্রতিবার একই সিম্বল ব্যবহৃত হলে একই রেফারেন্স ব্যবহার করা হয়। অপরদিকে, Strings প্রতিবার নতুন কপি তৈরি করে, যার ফলে অধিক মেমরি ব্যবহৃত হয়।
উদাহরণ:
symbol1 = :name
symbol2 = :name
# Same object id as both symbols point to the same reference
puts symbol1.object_id == symbol2.object_id # Output: true
string1 = "name"
string2 = "name"
# Different object ids, each string has its own reference
puts string1.object_id == string2.object_id # Output: falseএখানে, সিম্বল :name দুটি একই মেমরি রেফারেন্সের দিকে ইঙ্গিত করছে, তবে স্ট্রিং "name" দুটি আলাদা মেমরি রেফারেন্স পয়েন্ট করছে।
৩. Performance (পারফরম্যান্স)
Symbols সাধারণত Strings এর চেয়ে দ্রুত তুলনা করা যায়, কারণ সিম্বলের কেবল একটিই মেমরি রেফারেন্স থাকে। তবে, স্ট্রিংয়ের জন্য প্রতিবার তুলনা করতে নতুন কপি তৈরি করতে হয়, যা কিছুটা ধীর হতে পারে।
উদাহরণ:
symbol1 = :name
symbol2 = :name
puts symbol1 == symbol2 # Output: true (Quick comparison)
string1 = "name"
string2 = "name"
puts string1 == string2 # Output: true (Slower comparison)৪. Usage (ব্যবহার)
Symbols সাধারণত কনস্ট্যান্ট বা কী হিসেবে ব্যবহৃত হয়, যেখানে মান অপরিবর্তনীয় এবং দ্রুত অ্যাক্সেস করা প্রয়োজন। Strings সাধারণত ডেটা প্রদর্শন, ম্যানিপুলেশন এবং অন্যান্য টেক্সট-বেসড অপারেশনের জন্য ব্যবহৃত হয়।
Symbols এর ব্যবহার:
person = { name: "John", age: 30 }
puts person[:name] # Output: JohnStrings এর ব্যবহার:
greeting = "Hello, World!"
puts greeting.upcase # Output: HELLO, WORLD!সারসংক্ষেপ
- Symbols হল অপরিবর্তনীয় (immutable) এবং মেমরি দক্ষ ডেটা টাইপ, যেগুলি সাধারণত কনস্ট্যান্ট বা কী হিসেবে ব্যবহৃত হয়।
- Strings হল পরিবর্তনযোগ্য (mutable) এবং সাধারণত টেক্সট ডেটা সংরক্ষণ এবং ম্যানিপুলেশনের জন্য ব্যবহৃত হয়।
- Symbols দ্রুত তুলনা করা যায় এবং কম মেমরি খরচ করে, তবে Strings আরও নমনীয় এবং টেক্সট ম্যানিপুলেশনের জন্য উপযোগী।
Read more